class Solution {
public:
    int dx[4]={0,0,1,-1};
    int dy[4]={1,-1,0,0};
    int maxDistance(vector<vector<int>>& g) {
        int n=g.size();
        vector<vector<int>> k(n,vector<int>(n,1));
        vector<vector<int>> v(n,vector<int>(n,-1));
        if(k==g) return -1;
        queue<pair<int,int>> q;
        for(int i=0;i<n;++i)
        {
            for(int j=0;j<n;++j)
            {
                if(g[i][j]==1)
                {
                    q.push({i,j});
                    v[i][j]=0;
                }
            }
        }
        while(q.size())
        {
            int sz=q.size();
            while(sz--)
            {
                auto [x,y]=q.front();
                q.pop();
                for(int i=0;i<4;++i)
                {
                    int a=x+dx[i];
                    int b=y+dy[i];
                    if(a>=0&&a<n&&b>=0&&b<n
                    &&v[a][b]==-1)
                    {
                        v[a][b]=v[x][y]+1;
                        q.push({a,b});
                    }
                }
            }
        }
        int mymax=-1;
        for(int j=0;j<n;++j)
        {
            for(int i=0;i<n;++i)
            {
                mymax=max(mymax,v[j][i]);
            }
        }
        return mymax;
    }
};
